package main

import (
	"fmt"
	"sort"
	"strconv"
)

// 自定义排序函数
type ByFunc []string

func (b ByFunc) Len() int {
	return len(b)
}

func (b ByFunc) Less(i, j int) bool {
	// 比较两个字符串的拼接结果
	return b[i]+b[j] > b[j]+b[i]
}

func (b ByFunc) Swap(i, j int) {
	b[i], b[j] = b[j], b[i]
}

func largestNumber(nums []int) string {
	//将整数转换为字符串
	strs := make([]string, len(nums))
	for i := 0; i < len(nums); i++ {
		strs[i] = strconv.Itoa(nums[i])
	}

	//使用自定义排序
	sort.Sort(ByFunc(strs))
	//拼接结果
	result := ""
	for i := 0; i < len(strs); i++ {
		result += strs[i]
	}
	if result[0] == '0' {
		return "0"
	}
	return result
}

func main() {
	num1 := []int{10, 2}

	num2 := []int{3, 30, 34, 5, 9}

	fmt.Println(largestNumber(num1))

	fmt.Println(largestNumber(num2))
}
